home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / Programming Contest / Problems Folder / Problem 09 - State Machine / Solution.p < prev   
Encoding:
Text File  |  1998-06-04  |  2.3 KB  |  39 lines  |  [TEXT/CWIE]

  1. (*
  2. Problem 09 - State Machine
  3.  
  4. type GetNextCharProc = function( curstate: UInt32 ): UInt32;
  5.  
  6. procedure StateMachineInit( var state_machine: Handle; states: UInt32; chars: UInt32 );
  7. procedure AddTransition( state_machine: Handle; state1, state2: UInt32; first_char, last_char: UInt32 );
  8. procedure RunStateMachine( state_machine: Handle; start_state: UInt32; GetNextChar: GetNextCharProc; var stop_state: UInt32 );
  9.  
  10. StateMachineInit creates a new, empty state machine ready to accept state transitions, and containing states states (numbers 1 to states) and chars characters (numbered 1 to chars).  All the state machine information must be stored in the real Mac memory manager handle - it will be disposed with DisposeHandle and that must release all memory, so dont store any extra information outside the handle.  Also, you must be able to deal with having multiple state machine instantiated simultaneously.
  11.  
  12. AddTransition adds a transition from state1 to state2 for characters between (inclusive) first_char and last_char.  When you get to state1 and get a character between first_char and last_char you should proceed to state2.  The new transition overrides and previous transitions for these characters from state1 (ie, if you get transition 1->2 for chars 1-10, and then 1->3 for chars 5-6, you now have transition 1->2 for chars 1-4 and 7-10 and transition 1->3 for chars 5-6).
  13.  
  14. RunStateMachine starts in start_state and calls GetNextChar repeatedly until either it returns 0 or until it returns a character for which there is no transition at the current state.  Each time it gets a character, the state is moved to the state for which there is a transition from that state with that character [blerg :-].  The final state is returned in stop_state.
  15. *)
  16.  
  17. unit Solution;
  18.  
  19. interface
  20.  
  21. // Do not modify the interface
  22.  
  23.     uses
  24.         Types, Files;
  25.         
  26. type GetNextCharProc = function( state_machine: Handle): UInt32;
  27.  
  28. procedure StateMachineInit( var state_machine: Handle; states: UInt32; chars: UInt32 );
  29. procedure AddTransition( state_machine: Handle; state1, state2: UInt32; first_char, last_char: UInt32 );
  30. procedure RunStateMachine( state_machine: Handle; start_state: UInt32; GetNextChar: GetNextCharProc; var stop_state: UInt32 );
  31.  
  32. implementation
  33.  
  34. // Fill in your solution and then submit this folder
  35.  
  36. // Team Name: FILL IN YOUR TEAM NAME!
  37.  
  38. end.
  39.